/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ModuloConfiguracion;

import Acceso.Security;
import Modelo.DAL.Riesgo_DAO;
import Modelo.Riesgo;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.json.JSONObject;
import org.json.JSONArray;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author Patricia
 */
public class modificarRiesgoAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    private static final String[] ALLOWED = {"Administrador"};

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        if (!Security.validateSession(request, ALLOWED)) {
            Security.privilegeError(response);
            return null;
        }

        modificarRiesgoForm formBean = (modificarRiesgoForm) form;

        ActionErrors errors = new ActionErrors();
        boolean error = false;
        Pattern p;
        Matcher m;
        // Necesario para llenar le formulario
        String flag = request.getParameter("flag");
        if ((flag != null) && flag.equals("ida")) {
            System.out.println("entro en el flag ida");

            String nombre = formBean.getNombre();
            String atributos = " nombre, nombre_riesgo, descripcion, path";
            String from = " from riesgo ";
            String where = " where nombre = '" + nombre + "'";
            String select = "select " + atributos + ", (Select count(*) from riesgo) " + from + where;

            System.out.println("\n\n   >>>>----Nombre:" + formBean.getNombre() + "\n   >>>>----NombreAnterior:" + formBean.getNombreAnterior() + "\n   >>>>----SELECT IDA: " + select);

            response.setContentType("text/json");
            JSONArray riesgo = Riesgo_DAO.consultarRiesgosTabla(select);

            if (riesgo == null) {
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
            JSONObject rie = new JSONObject();
            rie.put("modificarRiesgoIda", riesgo);
            PrintWriter pw = response.getWriter();
            pw.write(rie.toString());
            pw.flush();
            pw.close();
            formBean.setError("");
            formBean.setSubmit("");
            formBean.setReset("");
            return mapping.findForward(FAILURE);
        }

        // Necesario para modificar el objeto

        String submit = formBean.getSubmit();
        if ((submit != null) && submit.equals("submit")) {
            // Necesario para resetear el formulario
            String reset = formBean.getReset();
            if ((reset != null) && reset.equals("si")) {
                System.out.println("RESETEAR!!!!!");
                formBean.reset(mapping, request);
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
            formBean.setReset("si");

            // Necesario para resetear el formulario
            String nombre = formBean.getNombre();
            String tipo = formBean.getTipo();
            String descripcion = formBean.getDescripcion();
            FormFile senalizacion = formBean.getSenalizacion();
            String path = "";
            System.out.println(" Nombre Riesgo :" + nombre);
            if (nombre == null || nombre.equals("")) {
                errors.add("nombre_rsg_requerido", new ActionMessage("errors.nombre_rsg_requerido"));
                saveErrors(request, errors);
                error = true;
            } else {
                p = Pattern.compile("[^a-zA-Z0-9/\\. ]+");
                m = p.matcher(nombre);
                if (m.find()) {
                    errors.add("nombre_invalido", new ActionMessage("errors.nombre_invalido"));
                    saveErrors(request, errors);
                    error = true;
                }
            }
            if (descripcion == null || descripcion.equals("")) {
                errors.add("descripcion_rsg_requerido", new ActionMessage("errors.descripcion_rsg_requerido"));
                saveErrors(request, errors);
                error = true;
            }

            if (error) {
                return mapping.findForward(FAILURE);
            }

            Riesgo riesgo = new Riesgo(nombre, tipo, descripcion, path);
            String nombreAnterior = formBean.getNombreAnterior();

            //System.out.println("\n\n               >>>>> Nombre anterior: "+nombreAnterior);
            if (Modelo.DAL.Riesgo_DAO.actualizarRiesgo(riesgo, nombreAnterior)) {
                formBean.reset(mapping, request);
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                formBean.setNombreAnterior("");
                return mapping.findForward(SUCCESS);
            } else {
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
        }

        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
        String nombre = request.getParameter("nombre");
        formBean.setNombre(nombre);
        formBean.setError("");
        formBean.setSubmit("");
        formBean.setReset("");
        return mapping.findForward(FAILURE);
        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
    }
}
